package algorithms.sort;

import algorithms.log.Log;

import java.util.Arrays;

public class InsertSort {
    public static void main(String[] args) {
        int[] arr = GetRandomArr.getRandomArr(10);
        System.out.println(Arrays.toString(arr));
        Log.start();
        insertSort(arr);
        Log.end();
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 插入排序
     * 思路：保证局部有序（相邻的数左边比右边小）--> 整体有序
     * 时间复杂度: o(N^2)
     * 最好情况O（n）
     * 比选择和冒泡好一些
     * @param arr
     */
    public static void insertSort(int[] arr) {
        if (arr == null || arr.length <=1)
            return;
        for (int i = 1;i < arr.length;i++) {// 从1到n
            for (int j= i-1;j >= 0 && arr[j] > arr[j+1];j--) {// 相邻与i的左位置开始比较，
                swap(arr,j,j+1);                            // 左边比右边大就要交换，直到左边比右边位置的数小
            }
        }
    }


    private static void swap(int[] arr, int i,int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

}
